package mobile.game.core.config;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import mobile.game.core.support.Sys;
import mobile.game.core.support.Utils;

/**
 * @author gaopan
 *
 * jowConfig.properties
 */
public class JowConfig {
	/** 配置文件名称 */
	private static final String CONFIG_NAME = "jowConfig.properties";
	
	//-----------------------------------------------------------------------
	// 连接服务器设置
	
	/** 客户端连接端口 */
	public static final int CONN_PORT;
	/** C2S协议是否加密 */
	public static final boolean CONN_ENCRYPT;
	/** 连接断开后允许重连的时间(秒) */
	public static final int CONN_RECONNECT_TIME;
	
	//-----------------------------------------------------------------------
	// 数据库设置
	
	/** db名字 */
	public static final String DB_SCHEMA;
	/** db url */
	public static final String DB_URL;
	/** mysql用户名 */
	public static final String DB_USER;
	/** mysql密码 */
	public static final String DB_PWD;
	/** 缓存同步间隔(秒) 设置为0时关闭写缓存 */
	public static final int DB_CACHED_SYNC_SEC;
	
	//-----------------------------------------------------------------------
	// game相关
	
	/** 运营平台ID 最大91 */
	public static final int GAME_PLATFORM_ID;
	/** 平台名字 */
	public static final String GAME_PLATFORM_NAME;
	
	/** 游戏区ID 最大9999 */
	public static final int GAME_SERVER_ID;
	
	/** 国家化语言 */
	public static final String GAME_I18N_KEY;
	
	/** 是否热加载数据 */
	public static final boolean GAME_RELOAD_CONF_DATA;
	
	//-----------------------------------------------------------------------
	// 统计配置
	
	/** 是否开启统计 */
	public static final boolean STATISTICS_ENABLE;
	/** 高消耗的数量 */
	public static final int STATISTICS_TOP_NUM;
	/** 统计间隔（秒） */
	public static final int STATISTICS_RESULT_TIME;
	
	//-----------------------------------------------------------------------
	// 调试相关
	
	/** 心跳处理时间间隔较长(毫秒) */
	public static final int DEBUG_PLUSLAG;
	
	/** 是否开始GM命令 */
	public static boolean DEBUG_IS_OPENGM;
	/** 是否开启Call调试信息 */
	public static final boolean DEBUG_IS_OPENCALLINFO;
	/** 是否开启前端战斗服务器 */
	public static boolean DEBUG_IS_CLIENTBATTLE;
	/** 是否开启消息打印 */
	public static boolean DEBUG_IS_PRINTMODE;
	/** 是否是数据debug状态[策划专用] */
	public static boolean DEBUG_IS_DATADEBUG;
	
	/** 服务器最多注册人数,最多100条 */
	public static final List<ChannelMax> DEBUG_SERVER_MAX;
	
	/** 是否开始IP白名单 */
	public static final boolean DEBUG_IS_IPWHITELIST;
	/** 是否开启账号白名单  true:只有名单之内可以进去  false:所有人都可以入 */
	public static final boolean DEBUG_IS_ACCOUNTWHITELIST;
	
	//-----------------------------------------------------------------------
	// 其他
	
	/** 激活码开放 */
	public static final boolean ACTIVEKEY_ENABLE;
	/** 客户端版本号 临时方案 */
	public static final String CLIENT_VERSION;
	
	/**
	 * 资源文件路径，可通过程序参数改变
	 */
	public static String RES_PATH = JowConfig.class.getResource("/").getPath() + "../../data/";
	
	static {
		// 获取配置
		Properties prop = Utils.readProperties(CONFIG_NAME);
		
		// 连接服务器设置
		CONN_PORT = Utils.intValue(prop.getProperty("conn.port"));
		CONN_ENCRYPT = Utils.booleanValue(prop.getProperty("conn.encrypt"));
		CONN_RECONNECT_TIME = Utils.intValue(prop.getProperty("conn.reconnect.time"));
		
		// 数据服务配置
		DB_SCHEMA = prop.getProperty("db.schema");
		DB_URL = prop.getProperty("db.url");
		DB_USER = prop.getProperty("db.user");
		DB_PWD = prop.getProperty("db.pwd");
		// 缓存同步间隔，windows下认为是开发环境
		if(Sys.isWin()) {
			DB_CACHED_SYNC_SEC = 1;
		} else {
			DB_CACHED_SYNC_SEC = Utils.intValue(prop.getProperty("db.cached.sync.sec"));
		}
		
		// game相关
		GAME_PLATFORM_ID = Integer.valueOf(prop.getProperty("game.platform.id"));
		GAME_PLATFORM_NAME = prop.getProperty("game.platform.name");
		GAME_SERVER_ID = Integer.valueOf(prop.getProperty("game.server.id"));
		GAME_I18N_KEY = prop.getProperty("game.i18n.key");
		GAME_RELOAD_CONF_DATA = Utils.booleanValue(prop.getProperty("game.reload_confdata"));
		
		// 统计配置
		STATISTICS_ENABLE = Utils.booleanValue(prop.getProperty("statistics.enable"));
		STATISTICS_TOP_NUM = Utils.intValue(prop.getProperty("statistics.top.num"));
		STATISTICS_RESULT_TIME = Utils.intValue(prop.getProperty("statistics.result.time"));
		
		// 调试相关
		DEBUG_PLUSLAG = Utils.intValue(prop.getProperty("debug.plusLag"));
		DEBUG_IS_OPENGM = Utils.booleanValue(prop.getProperty("debug.is_opengm"));
		DEBUG_IS_OPENCALLINFO = Utils.booleanValue(prop.getProperty("debug.is_opencallinfo"));
		DEBUG_IS_CLIENTBATTLE = Utils.booleanValue(prop.getProperty("debug.is_clientbattle"));
		DEBUG_IS_IPWHITELIST = Utils.booleanValue(prop.getProperty("debug.is_ipwhitelist"));
		DEBUG_IS_ACCOUNTWHITELIST = Utils.booleanValue(prop.getProperty("debug.is_accountwhitelist"));
		DEBUG_IS_PRINTMODE = Utils.booleanValue(prop.getProperty("debug.is_printmode"));
		DEBUG_IS_DATADEBUG = Utils.booleanValue(prop.getProperty("debug.is_datadebug"));
		
		// 各个渠道的注册上限
		DEBUG_SERVER_MAX = new ArrayList<>();
		for(int i = 1; i < 100; i++) {
			String config = prop.getProperty("debug.server_max" + i);
			if(config == null) {
				continue;
			}
			
			DEBUG_SERVER_MAX.add(new ChannelMax(config));
		}
		
		// 其他
		ACTIVEKEY_ENABLE = Utils.booleanValue(prop.getProperty("activekey.enable"));
		CLIENT_VERSION = String.valueOf(prop.getProperty("client.version"));
	}

}
